home *** CD-ROM | disk | FTP | other *** search
/ Euroscene 2 / Euroscene 2.iso / USEFUL / DeliTracker130 / Developer / Developer.run / Examples / GMC.s < prev    next >
Encoding:
Text File  |  1992-09-23  |  10.0 KB  |  578 lines

  1.  
  2.     incdir    "includes:"
  3.     include    "misc/DeliPlayer.i"
  4.  
  5. ;
  6. ;
  7.     SECTION Player,Code
  8. ;
  9. ;
  10.  
  11.     PLAYERHEADER PlayerTagArray
  12.  
  13.     dc.b '$VER: Game Music Creator player module V1.5 (30 Mar 92)',0
  14.     even
  15.  
  16. PlayerTagArray
  17.     dc.l    DTP_PlayerVersion,1
  18.     dc.l    DTP_PlayerName,PName
  19.     dc.l    DTP_Creator,CName
  20.     dc.l    DTP_Check2,Check
  21.     dc.l    DTP_Interrupt,Int
  22.     dc.l    DTP_InitPlayer,InitPlay
  23.     dc.l    DTP_EndPlayer,EndPlay
  24.     dc.l    DTP_InitSound,InitSnd
  25.     dc.l    DTP_EndSound,RemSnd
  26.     dc.l    TAG_DONE
  27.  
  28. *-----------------------------------------------------------------------*
  29. ;
  30. ; Player/Creatorname und lokale Daten
  31.  
  32. PName    dc.b 'G.M.C',0
  33. CName    dc.b 'Andreas Tadic,',10
  34.     dc.b 'adapted by Delirium',0
  35.     even
  36.  
  37. *-----------------------------------------------------------------------*
  38. ;
  39. ;Interrupt für G.M.C Replay
  40.  
  41. Int
  42.     movem.l    d0-d7/a0-a6,-(sp)
  43.     bsr    MU_playsong             ; DudelDiDum
  44.     movem.l    (sp)+,d0-d7/a0-a6
  45.     rts
  46.  
  47. *-----------------------------------------------------------------------*
  48. ;
  49. ; Testet auf GameMusicCreator-Modul
  50.  
  51. Check
  52.     move.l    dtg_ChkData(a5),a0
  53.  
  54.     lea    244(a0),a1            ; Start der Patternsequenz
  55.     move.l    240(a0),d0            ; Anzahl der Pattern
  56.     subq.l    #1,d0
  57.     moveq    #0,d2
  58. Chk_bigpat:                    ; find biggest Pattern
  59.     move.w    (a1)+,d1
  60.     cmp.w    d1,d2
  61.     bge.s    Chk_nobigpat
  62.     move.w    d1,d2
  63. Chk_nobigpat:
  64.     dbf     d0,Chk_bigpat
  65.     add.l   #444+1024,d2            ; + Patternbeginn + 1 Pattern
  66.     moveq    #14,d0
  67. Chk_calcins:
  68.     tst.l    (a0)                ; Sample da ?
  69.     beq.s    Chk_nocalc            ; Nein !
  70.     moveq    #0,d1
  71.     move.w    4(a0),d1            ; add sampletable
  72.     lsl.l   #1,d1
  73.     add.l   d1,d2
  74. Chk_nocalc:
  75.     lea    16(a0),a0            ; next sample
  76.     dbf     d0,Chk_calcins
  77.  
  78.     move.l    dtg_ChkSize(a5),d0        ; size of module
  79.     move.l    d0,d1
  80.     sub.l    #$40,d0                ; - 64 Bytes
  81.     add.l    #$40,d1                ; + 64 Bytes
  82.     cmp.l    d0,d2
  83.     blt.s    Chk_fail            ; too small
  84.     cmp.l    d1,d2
  85.     bgt.s    Chk_fail            ; too big
  86.  
  87.     moveq    #0,d0                ; Modul erkannt
  88.     bra.s    ChkEnd
  89. Chk_fail
  90.     moveq    #-1,d0                ; Modul nicht erkannt
  91. ChkEnd
  92.     rts
  93.  
  94. *-----------------------------------------------------------------------*
  95. ;
  96. ; Init Player
  97.  
  98. InitPlay
  99.     move.l    dtg_AudioAlloc(a5),a0        ; Function
  100.     jsr    (a0)                ; returncode is already set !
  101.     rts
  102.  
  103. *-----------------------------------------------------------------------*
  104. ;
  105. ; End Player
  106.  
  107. EndPlay
  108.     move.l    dtg_AudioFree(a5),a0        ; Function
  109.     jsr    (a0)
  110.     rts
  111.  
  112. *-----------------------------------------------------------------------*
  113. ;
  114. ; Init Sound
  115.  
  116. InitSnd
  117.     moveq    #0,d0
  118.     move.l    dtg_GetListData(a5),a0        ; Function
  119.     jsr    (a0)
  120.     bsr    MU_startmusic
  121.     rts
  122.  
  123. *-----------------------------------------------------------------------*
  124. ;
  125. ; End Sound
  126.  
  127. RemSnd
  128.     bsr    MU_stopmusic
  129.     rts
  130.  
  131. *-----------------------------------------------------------------------*
  132. ;
  133. ; G.M.C-Replay
  134.  
  135. *******************************************************
  136. ******** GameMusicCreator Replay-routine v1.0 *********
  137. *******************************************************
  138.  
  139. MU_startmusic:
  140.     move.l  a0,MU_data
  141.     move.l  a0,MU_tablepos
  142.     move.l  a0,MU_songpointer
  143.     add.l   #242,MU_tablepos
  144.     add.l   #444,MU_songpointer
  145.     move.w  #64,MU_patterncount
  146.     clr.w   $dff0a8
  147.     clr.w   $dff0b8
  148.     clr.w   $dff0c8
  149.     clr.w   $dff0d8
  150.     move.w  #$f,$dff096
  151.     clr.l   MU_vol0
  152.     clr.l   MU_vol2
  153.     clr.l   MU_pospointer
  154.     clr.w   MU_songspeed
  155.     clr.w   MU_note0
  156.     clr.w   MU_note1
  157.     clr.w   MU_note2
  158.     clr.w   MU_note3
  159.     clr.w   MU_slide0
  160.     clr.w   MU_slide1
  161.     clr.w   MU_slide2
  162.     clr.w   MU_slide3
  163.     clr.w   MU_stop
  164.     clr.l   MU_chan0
  165.     clr.l   MU_chan1
  166.     clr.l   MU_chan2
  167.     clr.l   MU_chan3
  168.     move.w  #6,MU_songstep
  169.     move.l  a0,a2
  170.     add.l   #244,a2
  171.     move.l  240(a0),d1
  172.     sub.l   #1,d1
  173.     clr.l   d0
  174. MU_sizeloop:
  175.     move.w  (a2)+,d2
  176.     cmp.w   d2,d0
  177.     bge     MU_nosizeadd
  178.     move.w  d2,d0
  179. MU_nosizeadd:
  180.     dbf     d1,MU_sizeloop
  181.     add.l   #1024,d0
  182.     move.l  a0,a1
  183.     add.l   #444,a1
  184.     add.l   d0,a1
  185.     move.l  #14,d7
  186.     bsr     MU_calcins
  187. ;    move.l  $6c,MU_oldirq+2            ; schauder !!!
  188. ;    move.l  #MU_interrupt,$6c        ; würg !!!
  189.     rts
  190.  
  191. MU_calcins:
  192.     cmp.l   #0,(a0)
  193.     bne     MU_calcit
  194.     add.l   #16,a0
  195.     dbf     d7,MU_calcins
  196.     rts
  197.  
  198. MU_calcit:
  199.     move.l  (a0),d0
  200.     move.l  8(a0),d1
  201.     sub.l   d0,d1  ;repeat
  202.     move.l  a1,(a0)
  203.     move.l  a1,d0
  204.     add.l   d1,d0
  205.     move.l  d0,8(a0) ;set repeat
  206.     cmp.w   #2,12(a0)
  207.     bne     MU_looping
  208.     move.l  #MU_empty,8(a0)
  209. MU_looping:
  210.     clr.l   d0
  211.     move.w  4(a0),d0 ;add sampletable
  212.     lsl.l   #1,d0
  213.     add.l   d0,a1
  214.     add.l   #16,a0
  215.     dbf     d7,MU_calcins
  216.     rts
  217.  
  218. MU_stopmusic:
  219. ;    move.l  MU_oldirq+2,$6c            ; hilfe !!!
  220.     clr.w   $dff0a8
  221.     clr.w   $dff0b8
  222.     clr.w   $dff0c8
  223.     clr.w   $dff0d8
  224.     move.w  #$f,$dff096
  225.     rts
  226.  
  227. ;MU_interrupt:
  228. ;    movem.l  d0-d7/a0-a6,-(a7)
  229. ;    btst     #5,$dff01f            ; kotz !!
  230. ;    beq      MU_novertblank
  231. ;    bsr      MU_playsong
  232. ;MU_novertblank:
  233. ;    movem.l  (a7)+,d0-d7/a0-a6
  234. ;MU_oldirq:  jmp $0                ; oh weh !!!
  235.  
  236. MU_playsong:
  237.     bsr     MU_everyvert
  238.     add.w   #1,MU_songspeed
  239.     move.w  MU_songstep,d0
  240.     cmp.w   MU_songspeed,d0
  241.     ble     MU_okplay
  242.     rts
  243. MU_okplay: 
  244.     clr.w   MU_songspeed
  245.     add.w   #1,MU_patterncount
  246.     cmp.w   #65,MU_patterncount
  247.     bne     MU_playit
  248. MU_setnewpat:
  249.     ******* calc position ****
  250.     add.l   #1,MU_pospointer
  251.     move.l  MU_pospointer,d0
  252.     move.l  MU_data,a5
  253.     cmp.l   240(a5),d0
  254.     bhi     MU_setstart
  255.     ***********************
  256.     move.w  #1,MU_patterncount
  257.     add.l   #2,MU_tablepos
  258.     move.l  MU_tablepos,a0
  259.     clr.l   d0
  260.     move.w  (a0),d0
  261.     move.l  MU_data,a0
  262.     add.l   #444,a0
  263.     add.l   d0,a0
  264.     move.l  a0,MU_songpointer
  265.     bra     MU_playit
  266.     ************************
  267. MU_setstart:
  268.     clr.l   MU_pospointer
  269.     move.l  MU_data,MU_tablepos
  270.     add.l   #242,MU_tablepos
  271.     bra     MU_setnewpat
  272. MU_playit:
  273.     move.l  MU_songpointer,a0
  274.     add.l   #16,MU_songpointer
  275.     move.l  (a0),d0
  276.     clr.w   d3
  277.     move.w  #1,d2
  278.     bsr     MU_setinstr
  279.     bsr     MU_seteffect
  280.     move.l  4(a0),d0
  281.     move.w  #2,d2
  282.     bsr     MU_setinstr
  283.     bsr     MU_seteffect
  284.     move.l  8(a0),d0
  285.     move.w  #3,d2
  286.     bsr     MU_setinstr
  287.     bsr     MU_seteffect
  288.     move.l  12(a0),d0
  289.     move.w  #4,d2
  290.     bsr     MU_setinstr
  291.     bsr     MU_seteffect
  292.     move.w  d3,$dff096
  293.     rts
  294.  
  295. MU_setinstr:
  296.     move.w  d0,d5
  297.     and.w   #$f000,d0
  298.     cmp.w   #0,d0
  299.     bne     MU_setit
  300.     rts
  301.  
  302. MU_setit:
  303.     swap    d0
  304.     move.w  d0,d1
  305.     clr.w   d0
  306.     swap    d0
  307.     lsr.w   #8,d0
  308.     lsr.w   #4,d0
  309.     sub.w   #1,d0
  310.     lsl.w   #4,d0
  311.     move.l  MU_data,a6
  312.     add.l   d0,a6
  313.     cmp.w   #1,d2
  314.     bne     MU_conti1
  315.     clr.w   $dff0a8
  316.     move.l  a6,MU_chan0
  317.     move.l  (a6),$dff0a0
  318.     move.w  4(a6),$dff0a4
  319.     move.w  d1,$dff0a6
  320.     move.w  d1,MU_note0
  321.     move.w  6(a6),MU_vol0
  322.     clr.w   MU_slide0
  323.     bset    #0,d3
  324.     rts
  325.  
  326. MU_conti1:
  327.     cmp.w   #2,d2
  328.     bne     MU_conti2
  329.     clr.w   $dff0b8
  330.     move.l  a6,MU_chan1
  331.     move.l  (a6),$dff0b0
  332.     move.w  4(a6),$dff0b4
  333.     move.w  d1,$dff0b6
  334.     move.w  d1,MU_note1
  335.     move.w  6(a6),MU_vol1
  336.     clr.w   MU_slide1
  337.     bset    #1,d3
  338.     rts
  339.  
  340. MU_conti2:
  341.     cmp.w   #3,d2
  342.     bne     MU_conti3
  343.     clr.w   $dff0c8
  344.     move.l  a6,MU_chan2
  345.     move.l  (a6),$dff0c0
  346.     move.w  4(a6),$dff0c4
  347.     move.w  d1,$dff0c6
  348.     move.w  d1,MU_note2
  349.     move.w  6(a6),MU_vol2
  350.     clr.w   MU_slide2
  351.     bset    #2,d3
  352.     rts
  353.  
  354. MU_conti3:
  355.     clr.w   $dff0d8
  356.     move.l  a6,MU_chan3
  357.     move.l  (a6),$dff0d0
  358.     move.w  4(a6),$dff0d4
  359.     move.w  d1,$dff0d6
  360.     move.w  d1,MU_note3
  361.     move.w  6(a6),MU_vol3
  362.     clr.w   MU_slide3
  363.     bset    #3,d3
  364.     rts
  365.  
  366. MU_seteffect:
  367.     move.w  d5,d6
  368.     and.w   #$00ff,d5
  369.     and.w   #$0f00,d6
  370.     cmp.w   #0,d6
  371.     beq     MU_effjump2
  372.     cmp.w   #$0100,d6
  373.     beq     MU_slideup
  374.     cmp.w   #$0200,d6
  375.     beq     MU_slidedown
  376.     cmp.w   #$0300,d6
  377.     beq     MU_setvolume
  378.     cmp.w   #$0500,d6
  379.     beq     MU_posjump
  380.     cmp.w   #$0400,d6
  381.     bne     MU_nobreak
  382. MU_itsabreak:
  383.     move.w  #64,MU_patterncount
  384.     rts
  385.  
  386. MU_nobreak:
  387.     cmp.w   #$0800,d6
  388.     bne     MU_effjump0
  389.     move.w  d5,MU_songstep
  390.     rts
  391.  
  392. MU_effjump0:
  393.     cmp.w   #$0600,d6
  394.     bne     MU_effjump1
  395.     bclr    #1,$bfe001
  396.     rts
  397.  
  398. MU_effjump1:
  399.     cmp.w   #$0700,d6
  400.     bne     MU_effjump2
  401.     bset    #1,$bfe001
  402. MU_effjump2:
  403.     rts
  404.  
  405. MU_posjump:
  406.     clr.l   d4
  407.     move.w  d5,d4
  408.     sub.l   #1,d4
  409.     move.l  d4,MU_pospointer
  410.     add.l   #1,d4
  411.     lsl.w   #1,d4
  412.     sub.w   #2,d4
  413.     move.l  MU_data,a0
  414.     add.l   #244,a0
  415.     add.l   d4,a0
  416.     move.l  a0,MU_tablepos
  417.     bra     MU_itsabreak
  418. MU_slideup:
  419.     neg.w   d5
  420. MU_slidedown:
  421.     cmp.w   #1,d2
  422.     bne     MU_j1
  423.     move.w  d5,MU_slide0
  424.     rts
  425.  
  426. MU_j1:
  427.     cmp.w   #2,d2
  428.     bne     MU_j2
  429.     move.w  d5,MU_slide1
  430.     rts
  431.  
  432. MU_j2:
  433.     cmp.w   #3,d2
  434.     bne     MU_j3
  435.     move.w  d5,MU_slide2
  436.     rts
  437.  
  438. MU_j3:
  439.     move.w  d5,MU_slide3
  440.     rts
  441.  
  442. MU_setvolume:
  443.     cmp.w   #1,d2
  444.     bne     MU_j00
  445.     move.w  d5,MU_vol0
  446.     ;move.w  d5,$dff0a8
  447.     rts
  448.  
  449. MU_j00:
  450.     cmp.w   #2,d2
  451.     bne     MU_j22
  452.     move.w  d5,MU_vol1
  453.     ;move.w  d5,$dff0b8
  454.     rts
  455.  
  456. MU_j22:
  457.     cmp.w   #3,d2
  458.     bne     MU_j33
  459.     move.w  d5,MU_vol2
  460.     ;move.w  d5,$dff0c8
  461.     rts
  462.  
  463. MU_j33:
  464.     move.w  d5,MU_vol3
  465.     ;move.w  d5,$dff0d8
  466.     rts
  467.  
  468. MU_everyvert:
  469.     move.w  MU_slide0,d0
  470.     add.w   d0,MU_note0
  471.     move.w  MU_note0,$dff0a6
  472.     move.w  MU_slide1,d0
  473.     add.w   d0,MU_note1
  474.     move.w  MU_note1,$dff0b6
  475.     move.w  MU_slide2,d0
  476.     add.w   d0,MU_note2
  477.     move.w  MU_note2,$dff0c6
  478.     move.w  MU_slide3,d0
  479.     add.w   d0,MU_note3
  480.     move.w  MU_note3,$dff0d6
  481.     btst    #0,MU_stop
  482.     beq     MU_ok1
  483.     bclr    #0,MU_stop
  484.     move.l  MU_chan0,a0
  485.     move.l  8(a0),$dff0a0
  486.     move.w  12(a0),$dff0a4
  487.     clr.l   MU_chan0
  488. MU_ok1:
  489.     btst    #1,MU_stop
  490.     beq     MU_ok2
  491.     bclr    #1,MU_stop
  492.     move.l  MU_chan1,a0
  493.     move.l  8(a0),$dff0b0
  494.     move.w  12(a0),$dff0b4
  495.     clr.l   MU_chan1
  496. MU_ok2:
  497.     btst    #2,MU_stop
  498.     beq     MU_ok3
  499.     bclr    #2,MU_stop
  500.     move.l  MU_chan2,a0
  501.     move.l  8(a0),$dff0c0
  502.     move.w  12(a0),$dff0c4
  503.     clr.l   MU_chan2
  504. MU_ok3:
  505.     btst    #3,MU_stop
  506.     beq     MU_ok4
  507.     bclr    #3,MU_stop
  508.     move.l  MU_chan3,a0
  509.     move.l  8(a0),$dff0d0
  510.     move.w  12(a0),$dff0d4
  511.     clr.l   MU_chan3
  512. MU_ok4:
  513.     move.w   #$8000,d3
  514.     cmp.l    #0,MU_chan0
  515.     beq      MU_okk1
  516.     bset     #0,MU_stop
  517.     bset     #0,d3
  518. MU_okk1:
  519.     cmp.l    #0,MU_chan1
  520.     beq      MU_okk2
  521.     bset     #1,MU_stop
  522.     bset     #1,d3
  523. MU_okk2:
  524.     cmp.l    #0,MU_chan2
  525.     beq      MU_okk3
  526.     bset     #2,MU_stop
  527.     bset     #2,d3
  528. MU_okk3:
  529.     cmp.l    #0,MU_chan3
  530.     beq      MU_okk4
  531.     bset     #3,MU_stop
  532.     bset     #3,d3
  533. MU_okk4:
  534.     move.w   d3,$dff096
  535.     move.w   MU_vol0,$dff0a8
  536.     move.w   MU_vol1,$dff0b8
  537.     move.w   MU_vol2,$dff0c8
  538.     move.w   MU_vol3,$dff0d8
  539.     rts
  540.  
  541.     ********** variables *****
  542. MU_stop:  dc.w 0
  543. MU_slide0: dc.w 0
  544. MU_slide1: dc.w 0
  545. MU_slide2: dc.w 0
  546. MU_slide3: dc.w 0
  547. MU_chan0: dc.l 0
  548. MU_chan1: dc.l 0
  549. MU_chan2: dc.l 0
  550. MU_chan3: dc.l 0
  551. MU_note0: dc.w 0
  552. MU_note1: dc.w 0
  553. MU_note2: dc.w 0
  554. MU_note3: dc.w 0
  555. MU_vol0: dc.w 0
  556. MU_vol1: dc.w 0
  557. MU_vol2: dc.w 0
  558. MU_vol3: dc.w 0
  559. MU_songspeed: dc.w 0
  560. MU_songstep: dc.w 5
  561. MU_patterncount: dc.w 0
  562. MU_songpointer: dc.l 0
  563. MU_tablepos: dc.l 0
  564. MU_pospointer: dc.l 0 
  565. MU_data: dc.l  0
  566.  
  567. ;
  568. ;
  569.     SECTION GMCData,Data_C
  570. ;
  571. ;
  572.  
  573. MU_empty: dcb.l 2,0
  574.  
  575.     *************************************************
  576.     *************************************************
  577.  
  578.